Mendengar orang berbicara tentang
Cryptography,
kadang banyak istilah yang suka tercampur-baur dan itu jadi perdebatan
tersendiri. Itupun tergantung dari sudut mana melihatnya. Secara umum
memang terhubung satu sama lainnya dalam konteknya sendiri.
Pada kesempatan kali ini kita akan coba mengupas tentang
Encoding,
Obfuscation,
Hashing dan
Encryption.
Encoding
Tujuan Encoding
adalah mengubah data yang dapat digunakan oleh berbagai macam sistim
secara tepat dan aman. Seperti mengirimkan data yang berbentuk biner
lewat email (seperti
attachment), menyimpan data biner ke dalam database atau menampilkan karakter-karakter special pada halaman
web atau media lainnya. Biasanya data itu diterjemahkan kedalam karakter sesuai dengan tipe yang digunakan.
Fokusnya pada bagaimana mengubah data dari satu sistem ke sistem lain
secara benar. Datanya sendiri tidak disandikan, jadi datanya seperti
apa adanya hanya bentuknya berbeda. Pada saat proses melakukan Encoding
biasanya akan digunakan cara yang sudah tersedia secara umum. Jadi data
diubah oleh algoritma yang sama, baik untuk merubah atau mengembalikan
lagi data itu seperti semula. Semua itu dilakukan tanpa perlu adanya
kunci, asal tahu algoritma mana yang digunakan. Data yang sudah di-Encoding akan bisa di-Decoding.
Ada banyak algoritma Encoding, seperti ASCII, Unicode, URL Encoding, Base64 dan lainnya. Yang paling sering kita lihat adalah Base64. Dari
email,
http sampai dalam
database banyak menggunakan ini.
Obfuscation
Arti kata Obfuscation
sendiri berarti membingungkan, yang dimaksud membuat sesuatu tidak
mudah dimengerti. Ia bukan mengacak tanpa aturan. Ia akan membuat sebuah
pesan menjadi sulit dibaca dan mengerti. Tujuannya ketika pesan itu
berada di orang yang tidak mengerti cara membacanya maka pesan itu
hanyalah pesan sampah.
Another person junk is another person gold.
Dalam pemograman cara ini juga banyak dipakai dalam
source-code
maupun yang berbentuk biner. Ini dilakukan agar orang lain tidak mudah
mereplika ke dalam bentuk yang lain.
Bukan berarti tidak bisa hanya
lebih sulit dan butuh waktu lebih, Reverse-Engineering sekarang banyak
tool yang mempercepat proses itu.
Biasanya cara ini dibuat agar manusia akan kesulitan memahami pesan yang sudah di-Obfuscation tapi tidak dengan mesin. Seperti pada kode C dibawah.
Dalam pemograman cara ini juga banyak dipakai dalam
source-code
maupun yang berbentuk biner. Ini dilakukan agar orang lain tidak mudah
mereplika ke dalam bentuk yang lain.
Bukan berarti tidak bisa hanya
lebih sulit dan butuh waktu lebih, Reverse-Engineering sekarang banyak
tool yang mempercepat proses itu.
Biasanya cara ini dibuat agar manusia akan kesulitan memahami pesan yang sudah di-Obfuscation tapi tidak dengan mesin. Seperti pada kode C dibawah.
char*M,A,Z,E=40,J[40],T[40];main(C){for(*J=A=scanf(M="%d",&C);
-- E; J[ E] =T
[E ]= E) printf("._"); for(;(A-=Z=!Z) || (printf("\n|"
) , A = 39 ,C --
) ; Z || printf (M ))M[Z]=Z[A-(E =A[J-Z])&&!C
& A == T[ A]
|6<<27<rand()||!C&!Z?J[T[E]=T[A]]=E,J[T[A]=A-Z]=A,"_.":" |"];}
Kompiler tetap dapat membaca dan melaksanakan tugasnya, sedangkan
kita jadi malas bacanya. Banyak aplikasi untuk melakukan ini, seperti JSFuck, Jscrambler, Dotfuscator, ionCube dan lainnya.
Kalau ini dianggap lebih aman, pikirkan lagi. Obfuscation ini mirip Encoding tapi tidak atau melakukannya secara manual untuk me-DeObfuscation. Ia menyulitkan manusianya saja tapi tidak mesin.
Hashing
Tugas utama Hashing adalah untuk memastikan integritas (keutuhan). Maksudnya seperti apa ya? Contohnya, kita ada sebuah
file. Dengan di-Hashing kita akan memdapatkan nilai tertentu sebagai bagian integritas
file tersebut. Apabila file itu dirubah, maka nilainya tidak akan sama lagi dengan Hashing pertama.
Jadi kita bisa tahu ini bukan file yang sama, ini yang kita sebuat integritas dari sebuah
file. Kita bisa lihat cara ini digunakan oleh Git.
Penerapan umum dari Hashing ini terlihat pada saat kita melakukan Authentication. Pada saat kita
login, yang dikirim ke
server adalah hash yang akan dibandingkan dengan hash yang sudah ada di
server.
Jadi kita tidak pernah mengirim
user-name dan
password lewat jaringan, yang ada kemungkinan disadap.
Dan cara yang sama ketika kita mengirim pesan yang sudah sudah di-Encryption dengan
private-key. Kita kirim pesan itu disertai
private-key yang di-hash. Di sisi
server hash itu dicocokan dengan yang ada di-
server. Kalau
valid maka paket itu akan bisa dibuka.
Banyak algoritma untuk melakukan Hashing, seperti SHA, MD5, bycrpt dan lainnya. Dengan kemajuan
hardware dan trik baru dalam
math banyak dari algoritma ini sudah bisa di akali. Tetap waspada juga.
Encryption
Encryption
adalah cara megubah data menjadi data tidak dapat dibaca tanpa potongan
kode (baca: key)-nya. Dengan begitu pesan tersebut hanya bisa dibaca
oleh orang yang memiliki
pesan yang integritasnya
valid dan memiliki
key-nya.
Prosesnya terlihat sederhana. Sebuah pesan dikonjugsikan dengan algoritma dan
key yang akan menghasilkan pecahan karakter yang cukup rumit. Untuk membaca pesan itu, akan sama kita perlu
key, algoritma dan pesan yang ter-Encryption. Mirip seperti Encoding alurnya, tapi
key diperlukan dan memainkan peranan penting.
Dalam beberapa algoritma, biasanya juga ditambahkan Hashing sebagai bagian prosesnya. Pilihannya juga banyak, dari AES, Blowfish, RSA dan lainnya.
Penutup
Dalam Cryptography
baik secara teori dan prakteknya adalah tentang keamanan berkomunikasi.
Yang melibatkan bagaimana cara melakukan itu dan memastikan tidak ada
siapapun dapat membaca pesan pribadi tersebut. Dari aspek keamanan data,
integritasnya, siapa penggunanya dan teknik yang bersangkutan (dari
math,
computer-science dan
electrical-engineering).
Dan untuk sekarang ini adalah luas sekali penggunaan Cryptography ini, terutama yang berhubungan dengan dunia bisnis.
Setelah melihat penjabaran diatas yang berhubungan langsung dengan Cryptography adalah Hashing dan Encryption. Bukan berarti Encoding dan Obfuscation tidak penting disini. Dalam beberapa kesempatan ke empat yang kita bahas tadi bekerja sama sesuai dengan kebutuhannya.
Sumber:
https://www.codepolitan.com/apa-itu-encoding-obfuscation-hashing-dan-encryption-58bfb7eee3215